<?php

/**
 * Класс-обертка для Jevix
 */
class Jevix implements iJevix {
	
	private static $oJevix = null;
	
	private function __construct () {}
	
	/**
	 * Обработка строки Jevix'ом
	 * @param string $string
	 * @param boolean $autoFormat
	 * @return string
	 */
	public static function parse ($string, $autoFormat = true) {
		if (self::$oJevix === null) {
			self::init ();
		}
		
		if (!$autoFormat) {
			$autoBrMode = self::$oJevix->isAutoBrMode;
			$aitoLinkMode = self::$oJevix->isAutoLinkMode;
			
			self::$oJevix->isAutoBrMode = false;
			self::$oJevix->isAutoLinkMode = false;
		}
		
		$a = array ();
		$string = self::$oJevix->parse($string, $a);
		
		if (!$autoFormat) {
			self::$oJevix->isAutoBrMode = $autoBrMode;
			self::$oJevix->isAutoLinkMode = $aitoLinkMode;
		}
		 
		$string = preg_replace ('/<video>http:\/\/(?:www\.|)youtube\.com\/watch\?v=([a-zA-Z0-9_\-]+)<\/video>/iu', '<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/$1&hl=en"></param><param name="wmode" value="opaque"></param><embed src="http://www.youtube.com/v/$1&hl=en" type="application/x-shockwave-flash" wmode="opaque" width="425" height="344"></embed></object>', $string);       
		$string = preg_replace ('/<video>http:\/\/(?:www\.|)rutube.ru\/tracks\/\d+.html\?v=([a-zA-Z0-9_\-]+)<\/video>/iu', '<object width="470" height="353"><param name="movie" value="http://video.rutube.ru/$1"></param><param name="wmode" value="opaque"></param><param name="allowFullScreen" value="true"></param><param name="flashVars" value="uid=662118"></param><embed src="http://video.rutube.ru/$1" type="application/x-shockwave-flash" wmode="opaque" width="470" height="353" allowFullScreen="true" flashVars="uid=662118"></embed></object>', $string);
		$string = preg_replace ('/<cut[^>]*\/?>/iu', '<a name="cut"></a>', $string);
		
		return $string;
	}
	
	private static function init () {
		include ENGINE_ROOT . '/libs/jevix.php';
		
		self::$oJevix = new JevixMain;
		
		// 1. Устанавливаем разрешённые теги. (Все не разрешенные теги считаются запрещенными.)
		self::$oJevix->cfgAllowTags(array('p', 'a', 'img', 'i', 'b', 'u', 'em', 'strong', 'nobr', 'li', 'ol', 'ul', 'sup', 'abbr', 'pre', 'acronym', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'adabracut', 'br', 'code', 'user', 'cut', 'video', 'object', 'param', 'embed', 'font', 'blockquote'));
		
		// 2. Устанавливаем коротие теги. (не имеющие закрывающего тега)
		self::$oJevix->cfgSetTagShort(array('br','img','user','cut'));
		
		// 3. Устанавливаем преформатированные теги. (в них все будет заменятся на HTML сущности)
		self::$oJevix->cfgSetTagPreformatted(array('pre','video'));
		
		// 4. Устанавливаем теги, которые необходимо вырезать из текста вместе с контентом.
		self::$oJevix->cfgSetTagCutWithContent(array('script', 'iframe', 'style'));
		
		// 5. Устанавливаем разрешённые параметры тегов. Также можно устанавливать допустимые значения этих параметров.
		self::$oJevix->cfgAllowTagParams('a', array('title', 'href', 'name'));
		self::$oJevix->cfgAllowTagParams('font', array('color'));
		self::$oJevix->cfgAllowTagParams('user', array('login'));
		self::$oJevix->cfgAllowTagParams('img', array('src', 'alt' => '#text', 'title', 'align' => array('right', 'left', 'center'), 'width' => '#int', 'height' => '#int', 'hspace' => '#int', 'vspace' => '#int'));
		self::$oJevix->cfgAllowTagParams('object', array('width' => '#int', 'height' => '#int', 'data' => '#link'));
		self::$oJevix->cfgAllowTagParams('param', array('name' => '#text', 'value' => '#text'));
		self::$oJevix->cfgAllowTagParams('embed', array('src' => '#image', 'type' => '#text','allowscriptaccess' => '#text', 'allowfullscreen' => '#text','width' => '#int', 'height' => '#int', 'flashvars'=> '#text', 'wmode'=> '#text'));
		
		
		// 6. Устанавливаем параметры тегов являющиеся обязяательными. Без них вырезает тег оставляя содержимое.
		self::$oJevix->cfgSetTagParamsRequired('img', 'src');
		self::$oJevix->cfgSetTagParamsRequired('user', 'login');
		self::$oJevix->cfgSetTagParamsAutoAdd('embed',array(array('name'=>'wmode','value'=>'opaque','rewrite'=>true)));
		//self::$oJevix->cfgSetTagParamsRequired('a', 'href');
		
		// 7. Устанавливаем теги которые может содержать тег контейнер
		//    cfgSetTagChilds($tag, $childs, $isContainerOnly, $isChildOnly)
		//       $isContainerOnly : тег является только контейнером для других тегов и не может содержать текст (по умолчанию false)
		//       $isChildOnly : вложенные теги не могут присутствовать нигде кроме указанного тега (по умолчанию false)
		self::$oJevix->cfgSetTagChilds('ul', 'li', true, true);
		self::$oJevix->cfgSetTagChilds('object', 'param', true, true);
		self::$oJevix->cfgSetTagChilds('object', 'embed', true, true);
		
		// 8. Устанавливаем атрибуты тегов, которые будут добавлятся автоматически
		//self::$oJevix->cfgSetTagParamsAutoAdd('a', array('rel' => 'nofollow'));
		//self::$oJevix->cfgSetTagParamsAutoAdd('img', array('width' => '300', 'height' => '300'));
		
		// 9. Устанавливаем автозамену
		self::$oJevix->cfgSetAutoReplace(array('+/-', '(c)', '(r)'), array('±', '©', '®'));
		
		// 10. Включаем или выключаем режим XHTML. (по умолчанию включен)
		self::$oJevix->cfgSetXHTMLMode(true);
		
		// 11. Включаем или выключаем режим замены переноса строк на тег <br/>. (по умолчанию включен)
		self::$oJevix->cfgSetAutoBrMode(true);
		
		// 12. Включаем или выключаем режим автоматического определения ссылок. (по умолчанию включен)
		self::$oJevix->cfgSetAutoLinkMode(true);
				
		// 13. Отключаем типографирование в определенном теге
		self::$oJevix->cfgSetTagNoTypography('code');
		self::$oJevix->cfgSetTagNoTypography('video');
	}
	
}